""""""


"""
Python在3.5版本的时候引入了类型注解, 以方便静态类型检查工具,IDE等第三方工具.
类型注解: 在代码中涉及数据交换的地方, 提供数据类型的注解(显示说明)

主要功能:
帮助第三方IDE工具(如PyCharm)对代码进行类型推断, 协助做代码提示
帮助开发者自身对变量进行类型注释

支持2类 类型:
变量的类型注解
函数(方法) 形参 列表 和 返回值 的类型注解

基础语法: 
变量:类型 = 

"""
# 下面演示变量类型注解

"""
这样理解 :前面是变量名 中间是数据类型的标注 = 后面是赋值
其实就是在赋值中间加上标注
这个玩意就是给开发者自己看的,你在 int = 后面输入字符串,一样输出.  
这个不是强制规定是什么类型的数据,只是一个标注(注释)   标注(注释)应该是什么数据而已
"""
# 基础数据类型注解
数据1: int = 10
数据2: str = "10j"
数据3: bool = True

print(数据1)  # 把鼠标放到变量名上,不要动 出现文档就有加的 类型注解


# 类对象类型注解
class 一个类:
    内容 = "孙新罡"


对象类型: 一个类 = 一个类()
print(对象类型.内容)

# 基础容器类型注解
列表1: list = [1, 44, 665]
元组1: tuple = (1, "rdd", 55)
字典1: dict = {'密码': 887682}

# 容器类型详细注解
列表2: list[int] = [1, 44, 665]
元组2: tuple[int, str, bool] = (1, "rdd", True)
字典2: dict[str: int] = {'密码': 887682}

print(元组2)  # 把鼠标放到变量名上,不要动

"""
除了使用  变量:类型,这种语法注解外,也可以 注释中进行类型注解
语法:
# type: 类型

"""
# 导包
import random
import json

# 在注释中进行类型注解      提示把鼠标放到变量名上,不要动
数据11 = random.randint(1, 7)  # type: int     # 取1到7的随机数
数据12 = json.loads('{"姓名": "孙新罡"}')  # type: dict[str,str]  # 转换成 字典类型数据

def 函数1():
    return 22  # type: int   # 注明返回值是 int 类型数据

数据13 = 函数1()
print()

# 类型注解的限制

"""
上面说了 不是强制规定类型数据
类型注解主要功能在于:
帮助第三方IDE工具(如PyCharm),对代码进行类型推断,协助做代码提示
帮助开发者自身对变量进行类型注释(备注) 而已

并不会真正对数据类型做验证和判断
也就是类型注解仅仅是提示性的,不是决定性的

数据1: int = "hkhh"
数据1: str = 2235

上面的代码也不会报错, 中间的注解 就是类似于 # 号的注释
只不过加到文档注解里而已,把鼠标放到 变量名或对象名 就可以看到了
"""

"""
上面是对数据进行注解,不止是数据   
函数的形参也可以注解,以注明这个形参要求的是上面 类型的数据

函数(方法)的类型注解--形参注解

在编写函数(方法),使用形参的时候第三方工具,没有任何提示
在调用函数(方法),传入参数时,第三方工具无法提示参数类型
这些都是因为,在我们定义函数(方法)的时候,没有给形参进行注解

函数和方法,形参类型注解语法
def 函数名(形参名: 类型, 形参名: 类型)
    内容
    
同时,函数方法的返回值也可以添加类型注解
语法如下:
def 函数名(形参名: 类型, 形参名: 类型) ->返回值类型 :
    内容
"""
# 添加注明 a和b 2个形参的要求的 数据类型.  同时注明返回值 int类型, 注:实际是 float类型
def 函数2(a: int, b: float) -> int:
    return a + b

# 把鼠标放到函数名上,不要动. 出现的文档就可以看到加上的 类型注解
函数2(1, 5.6)
# 看函数名文档 发现 -> int ,也标记出来来,但是这里的返回值类型是实际浮点,我注明的是整型.  这种就是是自己的注释而已,要清楚
